using System;
using System.Data;
using System.Configuration;
//using MySql.Data.MySqlClient;
using System.IO;
using System.Collections.Generic;
using System.Collections;
using System.Text;

/// <summary>
/// Summary description for DataAccess
/// </summary>
/// 
namespace MySQLProvider.DataBase
{
    //public abstract class MySQLDataAccess
    //{
    //    public MySQLDataAccess()
    //    {
    //        m_ConnectionString = ConfigurationSettings.AppSettings["SqlCSConnString"];
    //    }
    //    private string m_ConnectionString = "";
    //    protected string ConnectionString
    //    {
    //        get { return m_ConnectionString; }
    //        set { m_ConnectionString = value; }
    //    }
    //    private string m_EncryptKey = "";
    //    protected string EncryptKey
    //    {
    //        get { return m_EncryptKey; }
    //    }
       
    //    private bool _enableCaching = true;
    //    protected bool EnableCaching
    //    {
    //        get { return _enableCaching; }
    //        set { _enableCaching = value; }
    //    }

    //    private int _cacheDuration = 0;

    //    protected int CacheDuration
    //    {
    //        get { return _cacheDuration; }
    //        set { _cacheDuration = value; }
    //    }
       
    //    public bool WriteErrorToLog
    //    {           
    //        get
    //        {                
    //            //string s = ConfigManagerBLL.GetConfig("WriteSqlError");
    //            return false; //s.ToLower().Trim() == "true";                
    //        }
    //    }
    //    public string ErrorLogFile
    //    {
    //        get 
    //        {
    //            return "";// ConfigManagerBLL.GetConfig("SqlErrorLogFile");                
    //        }
    //    }
        
    //    public string cast_UInt(long expr)
    //    {
    //        string str  = "cast(" + expr.ToString() + " as UNSIGNED INT)";

    //        return str;
    //    }

    //    protected object ConvertNullObjectToDBNull(object obj)
    //    {
    //        if (obj == null)
    //            return DBNull.Value;
    //        return obj;
    //    }
    //    private void WriteErrorToLogFile(Exception ex)
    //    {
    //        if (WriteErrorToLog)
    //        {
    //            try
    //            {                    
    //                string logFile = "";
    //                if (ErrorLogFile != "")
    //                    logFile = ErrorLogFile;
    //                else
    //                    logFile = "../LogFiles/sqlErrors.txt";

    //                //  [3/5/2012 DUCAN]
    //                logFile = ""; //HttpContext.Current.Server.MapPath(logFile);

    //                FileStream fs;
    //                if (!File.Exists(logFile))
    //                    fs = File.Create(logFile);
    //                else
    //                    fs = new FileStream(logFile, FileMode.Append, FileAccess.Write);
                    
    //                if(fs != null)
    //                {
    //                    StreamWriter sw = new StreamWriter(fs);
    //                    if (fs.Length > 0)
    //                        sw.Write(Environment.NewLine);
    //                    sw.Write(DateTime.Now.ToString("MM/dd/yyyy hh:mm:ss tt") + ":\t");
    //                    sw.Write(ex.Message);

    //                    sw.Close();
    //                    fs.Close();
    //                }
                    
    //            }
    //            catch
    //            {}
    //        }
    //    }

    //    protected int ExecuteNonQuery(MySqlCommand cmd)
    //    {
    //        try
    //        {
    //            using (MySqlConnection cn = new MySqlConnection(m_ConnectionString))
    //            {
    //                cn.Open();
    //                cmd.Connection = cn;
    //                //cmd.CommandTimeout = TimeOut;
    //                return cmd.ExecuteNonQuery();
    //            }

    //        }
    //        catch (Exception ex)
    //        {
    //            throw ex;
    //        }
    //    }

    //    protected MySqlDataReader ExecuteReader(MySqlCommand cmd)
    //    {
    //        return ExecuteReader(cmd, CommandBehavior.Default);
    //    }

    //    protected MySqlDataReader ExecuteReader(MySqlCommand cmd, CommandBehavior behavior)
    //    {
    //        return cmd.ExecuteReader(behavior);
    //    }

    //    protected object ExecuteScalar(MySqlCommand cmd)
    //    {
    //        return cmd.ExecuteScalar();
    //    }
    //    public DataSet ExecuteDataset(string strSQL)
    //    {
    //        try
    //        {
    //            using (MySqlConnection cn = new MySqlConnection(m_ConnectionString))
    //            {
    //                cn.Open();
    //                MySqlCommand cmd = new MySqlCommand(strSQL, cn);
    //                cmd.CommandType = CommandType.Text;
    //                //cmd.CommandTimeout = GlobalsFs.g_CommandTimeOut;
    //                MySqlDataAdapter adap = new MySqlDataAdapter(cmd);
    //                DataSet dst = new DataSet();
    //                adap.Fill(dst);
    //                return dst;
    //            }
    //        }
    //        catch (MySqlException e)
    //        {
    //            throw e;
    //        }
    //        catch (System.Exception e)
    //        {
    //            throw e;
    //        }
    //    }

    //    public DataSet Execute_Store(string strSQL, MySqlParameter[] sqlParams)
    //    {
    //        try
    //        {
    //            using (MySqlConnection cn = new MySqlConnection(m_ConnectionString))
    //            {
    //                cn.Open();
    //                MySqlCommand cmd = new MySqlCommand(strSQL, cn);
    //                cmd.CommandType = CommandType.StoredProcedure;                    
    //                //cmd.CommandTimeout = TimeOut;

    //                foreach (MySqlParameter param in sqlParams)
    //                    cmd.Parameters.Add(param);

    //                MySqlDataAdapter adap = new MySqlDataAdapter(cmd);
    //                DataSet dst = new DataSet();
    //                adap.Fill(dst);
    //                return dst;                    
    //            }
    //        }
    //        catch (Exception ex)
    //        {
    //            throw ex;
    //        }

    //    }

    //    protected bool ExecuteNonQuery(string strSQL)
    //    {
    //        try
    //        {
    //            using (MySqlConnection cn = new MySqlConnection(m_ConnectionString))
    //            {
    //                cn.Open();
    //                MySqlCommand cmd = new MySqlCommand(strSQL, cn);
    //                cmd.CommandType = CommandType.Text;
    //                //cmd.CommandTimeout = TimeOut;
    //                return cmd.ExecuteNonQuery() >= 0;
    //            }
    //        }
    //        catch (Exception ex)
    //        {
    //            throw ex;
    //        }
    //    }
    //    protected bool ExecuteNonQuery(string strSQL, MySqlParameter[] sqlParams)
    //    {
    //        try
    //        {
    //            using (MySqlConnection cn = new MySqlConnection(m_ConnectionString))
    //            {
    //                cn.Open();
    //                MySqlCommand cmd = new MySqlCommand(strSQL, cn);
    //                cmd.CommandType = CommandType.Text;
    //                //cmd.CommandTimeout = TimeOut;
    //                foreach (MySqlParameter param in sqlParams)
    //                    cmd.Parameters.Add(param);
    //                return cmd.ExecuteNonQuery() > 0;
    //            }
    //        }
    //        catch (Exception ex)
    //        {
    //            throw ex;
    //        }
    //    }
    //    protected MySqlDataReader ExecuteReader(string strSQL)
    //    {
    //        try
    //        {
    //            MySqlConnection cn = new MySqlConnection(m_ConnectionString);
    //            cn.Open();
    //            MySqlCommand cmd = new MySqlCommand(strSQL, cn);
    //            cmd.CommandType = CommandType.Text;
    //            //cmd.CommandTimeout = TimeOut;
    //            return cmd.ExecuteReader(CommandBehavior.CloseConnection);
    //        }
    //        catch (MySqlException ex)
    //        {
    //            //WriteLog:
    //            throw ex;
    //            //throw;
    //        }
    //        catch(Exception ex)
    //        {
    //            throw ex;
    //        }
    //    }

    //    protected object ExecuteScalar(string strSQL)
    //    {
    //        try
    //        {
    //            using (MySqlConnection cn = new MySqlConnection(m_ConnectionString))
    //            {
    //                cn.Open();
    //                MySqlCommand cmd = new MySqlCommand(strSQL, cn);
    //                cmd.CommandType = CommandType.Text;
    //                // cmd.CommandTimeout = TimeOut;
    //                return cmd.ExecuteScalar();
    //            }
    //        }
    //        catch (System.Exception ex)
    //        {
    //            throw ex;
    //        }
    //    }
    //    public bool ExecuteProcedure(string procName, MySqlParameter[] cmdParams)
    //    {
    //        try
    //        {
    //            using (MySqlConnection cn = new MySqlConnection(m_ConnectionString))
    //            {
    //                cn.Open();
    //                MySqlCommand cmd = new MySqlCommand(procName, cn);
    //                //cmd.CommandTimeout = TimeOut;
    //                cmd.CommandType = CommandType.StoredProcedure;
    //                MySqlParameter myParm = cmd.Parameters.Add("?RetValue", MySqlDbType.Int32);
    //                myParm.Direction = ParameterDirection.ReturnValue;
    //                for (int i = 0; i < cmdParams.Length; i++)
    //                    cmd.Parameters.Add(cmdParams[i]);
    //                cmd.ExecuteNonQuery();
    //                return true;
    //            }
    //        }
    //        catch (Exception ex)
    //        {
    //            throw ex;
    //        }
    //    }

    //    //2012-03-19,van
    //    protected DataSet ExecuteDataset(string strSQL, List<string> arrPramName, List<object> arrValue)
    //    {
    //        try
    //        {
    //            using (MySqlConnection cn = new MySqlConnection(m_ConnectionString))
    //            {
    //                cn.Open();
    //                MySqlCommand cmd = new MySqlCommand(strSQL, cn);
    //                cmd.CommandType = CommandType.Text;
    //                //cmd.CommandTimeout = TimeOut;
    //                for (int i = 0; i < arrPramName.Count; i++)
    //                {
    //                    cmd.Parameters.Add(new MySqlParameter(arrPramName[i], arrValue[i]));
    //                }
    //                MySqlDataAdapter adap = new MySqlDataAdapter(cmd);
    //                DataSet dst = new DataSet();
    //                adap.Fill(dst);

    //                cmd.Parameters.Clear();
    //                cmd.Dispose();
    //                return dst;
    //            }
    //        }
    //        catch (Exception ex)
    //        {
    //            throw ex;
    //        }
    //    }

    //    //2012-03-19,van
    //    protected int ExecuteNonQuery(string strSQL, List<string> arrPramName, List<object> arrValue)
    //    {
    //        try
    //        {
    //            using (MySqlConnection cn = new MySqlConnection(m_ConnectionString))
    //            {
    //                cn.Open();
    //                MySqlCommand cmd = new MySqlCommand(strSQL, cn);
    //                cmd.CommandType = CommandType.Text;
    //                //cmd.CommandTimeout = TimeOut;
    //                for (int i = 0; i < arrPramName.Count; i++)
    //                {
    //                    cmd.Parameters.Add(new MySqlParameter(arrPramName[i], arrValue[i]));
    //                }
    //                int iInsert = cmd.ExecuteNonQuery();
    //                cmd.Parameters.Clear();
    //                cmd.Dispose();
    //                return iInsert;
    //            }
    //        }
    //        catch (Exception ex)
    //        {
    //            throw ex;
    //        }
    //    }
        
    //    //2012-03-19,van
    //    protected object ExecuteScalar(string strSQL, List<string> arrParam, List<object> arrValue)
    //    {
    //        try
    //        {
    //            using (MySqlConnection cn = new MySqlConnection(m_ConnectionString))
    //            {
    //                cn.Open();
    //                MySqlCommand cmd = new MySqlCommand(strSQL, cn);
    //                cmd.CommandType = CommandType.Text;

    //                for (int i = 0; i < arrParam.Count; i++)
    //                {
    //                    cmd.Parameters.Add(new MySqlParameter(arrParam[i], arrValue[i]));
    //                }

    //                object obj = cmd.ExecuteScalar();
    //                cmd.Parameters.Clear();
    //                cmd.Dispose();
    //                return obj;
    //            }
    //        }
    //        catch (System.Exception ex)
    //        {
    //            throw ex;
    //        }
    //    }


    //    //2012-03-19,van
    //    protected Hashtable ExecuteHashtable(string query)
    //    {
    //        try
    //        {
    //            using (MySqlConnection cn = new MySqlConnection(m_ConnectionString))
    //            {
    //                cn.Open();
    //                MySqlCommand cmd = new MySqlCommand(query, cn);
    //                cmd.CommandType = CommandType.Text;

    //                //cmd.CommandTimeout = TimeOut;

    //                MySqlDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
    //                Hashtable hsObjs = null;
    //                if (reader.Read())
    //                {
    //                    hsObjs = new Hashtable();
    //                    string fieldName;
    //                    for (int i = 0; i < reader.FieldCount; i++)
    //                    {
    //                        fieldName = reader.GetName(i).ToLower();
    //                        if (!hsObjs.ContainsKey(fieldName))
    //                            hsObjs.Add(fieldName, reader[i]);
    //                    }
    //                }

    //                if (reader != null)
    //                    reader.Close();
    //                if (cmd != null)
    //                    cmd.Dispose();
    //                return hsObjs;
    //            }
    //        }
    //        catch (System.Exception ex)
    //        {
    //            throw ex;
    //        }

    //    }

    //    //2012-03-19
    //    protected Hashtable ExecuteHashtable(string query, List<string> arrParam, List<object> arrValue)
    //    {
    //        try
    //        {
    //            using (MySqlConnection cn = new MySqlConnection(m_ConnectionString))
    //            {
    //                cn.Open();
    //                MySqlCommand cmd = new MySqlCommand(query, cn);
    //                cmd.CommandType = CommandType.Text;
    //                //cmd.CommandTimeout = TimeOut;
    //                for (int i = 0; i < arrParam.Count; i++)
    //                {
    //                    cmd.Parameters.Add(new MySqlParameter(arrParam[i], arrValue[i]));
    //                }
    //                MySqlDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
    //                Hashtable hsObjs = null;
    //                if (reader.Read())
    //                {
    //                    hsObjs = new Hashtable();
    //                    string fieldName;
    //                    for (int i = 0; i < reader.FieldCount; i++)
    //                    {
    //                        fieldName = reader.GetName(i).ToLower();
    //                        if (!hsObjs.ContainsKey(fieldName))
    //                            hsObjs.Add(fieldName, reader[i]);
    //                    }
    //                }

    //                if (reader != null)
    //                    reader.Close();
    //                if (cmd != null)
    //                    cmd.Dispose();
    //                return hsObjs;
    //            }
    //        }
    //        catch (System.Exception ex)
    //        {
    //            throw ex;
    //        }

    //    }

    //    //2012-03-19,van
    //    protected List<object> GetListObject(string strSQL)
    //    {
    //        List<object> arrObj = new List<object>();

    //        using (MySqlConnection cn = new MySqlConnection(m_ConnectionString))
    //        {
    //            MySqlDataReader reader = null;
    //            try
    //            {
    //                cn.Open();
    //                MySqlCommand cmd = new MySqlCommand(strSQL, cn);
    //                cmd.CommandType = CommandType.Text;
    //                //cmd.CommandTimeout = TimeOut;
    //                reader = cmd.ExecuteReader();

    //                object obj;

    //                while (reader.Read())
    //                {
    //                    obj = reader.GetValue(0);
    //                    arrObj.Add(obj);
    //                }
    //                reader.Close();
    //            }
    //            catch (Exception ex)
    //            {
    //                if (reader != null)
    //                {
    //                    reader.Close();
    //                }
    //                throw ex;
    //            }
    //        }
    //        return arrObj;
    //    }//end

    //    //2012-03-19,van
    //    protected List<object> GetListObject(string strSQL, List<string> arrPram, List<object> arrValue)
    //    {
    //        List<object> arrObj = new List<object>();

    //        using (MySqlConnection cn = new MySqlConnection(m_ConnectionString))
    //        {
    //            MySqlDataReader reader = null;
    //            try
    //            {
    //                cn.Open();
    //                MySqlCommand cmd = new MySqlCommand(strSQL, cn);
    //                cmd.CommandType = CommandType.Text;
    //                //cmd.CommandTimeout = TimeOut;
    //                for (int i = 0; i < arrPram.Count; i++)
    //                {
    //                    cmd.Parameters.Add(new MySqlParameter(arrPram[i], arrValue[i]));
    //                }
    //                reader = cmd.ExecuteReader();

    //                object obj;

    //                while (reader.Read())
    //                {
    //                    obj = reader.GetValue(0);
    //                    arrObj.Add(obj);
    //                }
    //                reader.Close();
                    
    //            }
    //            catch (Exception ex)
    //            {
    //                if (reader != null)
    //                {
    //                    reader.Close();
    //                }
    //                throw ex;
    //            }
    //        }
    //        return arrObj;
    //    }//end

    //    /// <summary>
    //    /// get array of item that item is array of object
    //    /// </summary>
    //    /// 2012-03-19,van; 
    //    /// <param name="strSQL"></param>
    //    /// <returns></returns>
    //    protected ArrayList GetArrayObjects(string strSQL)
    //    {
    //        ArrayList arrObjs = new ArrayList();

    //        using (MySqlConnection cn = new MySqlConnection(m_ConnectionString))
    //        {
    //            MySqlDataReader reader = null;
    //            try
    //            {
    //                cn.Open();
    //                MySqlCommand cmd = new MySqlCommand(strSQL, cn);
    //                cmd.CommandType = CommandType.Text;
    //                //cmd.CommandTimeout = TimeOut;
    //                reader = cmd.ExecuteReader();

    //                object[] objs;

    //                while (reader.Read())
    //                {
    //                    objs = new object[reader.FieldCount];
    //                    reader.GetValues(objs);
    //                    arrObjs.Add(objs);
    //                }
    //                reader.Close();
    //            }
    //            catch (Exception ex)
    //            {
    //                if (reader != null)
    //                {
    //                    reader.Close();
    //                }
    //                throw ex;
    //            }
    //        }
    //        return arrObjs;
    //    }

    //    //2012-03-19,van
    //    public static string ArrayStringToStringFilter(List<string> lstString)
    //    {
    //        if (lstString == null || lstString.Count == 0)
    //            return "''";
    //        StringBuilder strBuilder = new StringBuilder();
    //        for (int i = 0; i < lstString.Count; i++)
    //        {
    //            strBuilder.Append("'" + lstString[i] + "'");
    //            if (i < lstString.Count - 1)
    //                strBuilder.Append(",");
    //        }
    //        return strBuilder.ToString();
    //    }

    //    //2012-03-19,van
    //    public static string ArrayStringToStringFilter(string[] arrItem)
    //    {
    //        if (arrItem == null || arrItem.Length == 0)
    //            return "''";
    //        StringBuilder strBuilder = new StringBuilder();
    //        for (int i = 0; i < arrItem.Length; i++)
    //        {
    //            strBuilder.Append("'" + arrItem[i] + "'");
    //            if (i < arrItem.Length - 1)
    //                strBuilder.Append(",");
    //        }
    //        return strBuilder.ToString();
    //    }

    //    //2012-03-19,van
    //    public static string ArrayIntToStringFilter(List<int> lstString)
    //    {
    //        if (lstString == null || lstString.Count == 0)
    //            return "''";
    //        StringBuilder strBuilder = new StringBuilder();
    //        for (int i = 0; i < lstString.Count; i++)
    //        {
    //            strBuilder.Append(lstString[i].ToString());
    //            if (i < lstString.Count - 1)
    //                strBuilder.Append(",");
    //        }
    //        return strBuilder.ToString();
    //    }



    //    public static string ArrayInt64ToStringFilter(List<long> lstValue)
    //    {
    //        if (lstValue == null || lstValue.Count == 0)
    //            return "''";
    //        StringBuilder strBuilder = new StringBuilder();
    //        for (int i = 0; i < lstValue.Count; i++)
    //        {
    //            strBuilder.Append(lstValue[i].ToString());
    //            if (i < lstValue.Count - 1)
    //                strBuilder.Append(",");
    //        }
    //        return strBuilder.ToString();
    //    }

    //    //2012-03-20,van
    //    protected bool ExecuteNonQuery(string strSQL,List<string> arrPram,List<object> arrValue,  MySqlParameter[] sqlParams)
    //    {
    //        try
    //        {
    //            using (MySqlConnection cn = new MySqlConnection(m_ConnectionString))
    //            {
    //                cn.Open();
    //                MySqlCommand cmd = new MySqlCommand(strSQL, cn);
    //                cmd.CommandType = CommandType.Text;
    //                for (int i = 0; i < arrPram.Count; i++)
    //                {
    //                    cmd.Parameters.Add(new MySqlParameter(arrPram[i], arrValue[i]));
    //                }
    //                foreach (MySqlParameter param in sqlParams)
    //                    cmd.Parameters.Add(param);
    //                return cmd.ExecuteNonQuery() > 0;
    //            }
    //        }
    //        catch (Exception ex)
    //        {
    //            //GlobalsFs.WriteLog_New("ErrorSQL.log", DateTime.UtcNow.ToString() + " - " + strSQL + ": " + ex.Message);
    //            return false;
    //        }
    //    }

    //    // [26-03-2012] @Thi 
    //    public int ExecuteNonQueryReturnInt(string strSQL)
    //    {
    //        try
    //        {
    //            using (MySqlConnection cn = new MySqlConnection(m_ConnectionString))
    //            {
    //                cn.Open();
    //                MySqlCommand cmd = new MySqlCommand(strSQL, cn);
    //                cmd.CommandType = CommandType.Text;
                    
    //                return cmd.ExecuteNonQuery();
    //            }
    //        }
    //        catch (Exception ex)
    //        {
    //            //GlobalsFs.WriteLog_New("ErrorSQL.log", DateTime.UtcNow.ToString() + " - " + strSQL + ": " + ex.Message);
    //            return 0;
    //        }
    //    }

    //    //2012-03-30,van
    //    protected List<Hashtable> GetArrayHashtable(string query)
    //    {
    //        try
    //        {
    //            using (MySqlConnection cn = new MySqlConnection(m_ConnectionString))
    //            {
    //                cn.Open();
    //                MySqlCommand cmd = new MySqlCommand(query, cn);
    //                cmd.CommandType = CommandType.Text;

    //                //cmd.CommandTimeout = TimeOut;

    //                MySqlDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
    //                Hashtable hsObjs = null;
    //                List<Hashtable> arrHsObj = new List<Hashtable>();
    //                string fieldName;
    //                int i;
    //                while( reader.Read())
    //                {
    //                    hsObjs = new Hashtable();
    //                    for (i = 0; i < reader.FieldCount; i++)
    //                    {
    //                        fieldName = reader.GetName(i).ToLower();
    //                        if (!hsObjs.ContainsKey(fieldName))
    //                            hsObjs.Add(fieldName, reader[i]);
    //                    }
    //                    arrHsObj.Add(hsObjs);
    //                }

    //                reader.Close();
    //                reader = null;
                        
    //                if (cmd != null)
    //                    cmd.Dispose();
    //                return arrHsObj;
    //            }
    //        }
    //        catch (System.Exception ex)
    //        {
    //            throw ex;
    //        }

    //    }

    //    //2012-08-14,van
    //    protected MySqlDataReader ExecuteReader(string strSQL,List<string> arrParam, List<object> arrValue)
    //    {
    //        try
    //        {
    //            MySqlConnection cn = new MySqlConnection(m_ConnectionString);
    //            cn.Open();
    //            MySqlCommand cmd = new MySqlCommand(strSQL, cn);
    //            for (int i = 0; i < arrParam.Count; i++)
    //            {
    //                cmd.Parameters.Add(new MySqlParameter(arrParam[i], arrValue[i]));
    //            }
    //            cmd.CommandType = CommandType.Text;
    //            //cmd.CommandTimeout = TimeOut;
    //            return cmd.ExecuteReader(CommandBehavior.CloseConnection);
    //        }
    //        catch (MySqlException ex)
    //        {
    //            //WriteLog:
    //            throw ex;
    //            //throw;
    //        }
    //        catch (Exception ex)
    //        {
    //            throw ex;
    //        }
    //    }
    //}
    
}
